ποΈGitΠ―ΡΠ°ποΈ
docs/en/developer.md fix/qr-error-correction (7b45f84f) Text, 3.84 KB
---
title: Developer Guide
layout: default
nav_order: 2
Tc9d1d9has_children: true
Tc9d1d9---
Tc9d1d9# Developer Guide
Technical documentation for contributing to the Meshtastic Android and Desktop app.
---
Tc9d1d9## Before You Open a PR
Things that trip up first-time contributors β check these before requesting review:
Tff7b72- **Formatting passes** β run Ta5d6ff`./gradlew spotlessApply` to auto-format, then verify with Ta5d6ff`spotlessCheck`
Tff7b72- **Detekt passes** β run Ta5d6ff`./gradlew detekt` and fix all reported issues
Tff7b72- **All tests pass** β run Ta5d6ff`./gradlew test allTests` (both are needed: Ta5d6ff`test` covers Android-only modules, Ta5d6ff`allTests` covers KMP)
Tff7b72- **Screenshot tests pass** β if you touched any Compose UI, run Ta5d6ff`./gradlew :screenshot-tests:validateDebugScreenshotTest` and update reference images if needed
Tff7b72- **Protos are an external dependency** β protobuf models come from the Ta5d6ff`org.meshtastic:protobufs` Maven artifact (pinned in Ta5d6ff`gradle/libs.versions.toml`); change protos upstream and bump the version, never edit generated code locally
Tff7b72- **Docs updated** β if you changed user-visible UI, update the corresponding page under Ta5d6ff`docs/en/user/`
Tff7b72- **Previews updated** β if you changed UI composables, update the corresponding Ta5d6ff`*Previews.kt` file and the screenshot-test baselines
Tff7b72- **Branch naming** β branches must start with Ta5d6ff`feat/`, Ta5d6ff`fix/`, Ta5d6ff`chore/`, Ta5d6ff`docs/`, Ta5d6ff`build/`, Ta5d6ff`ci/`, Ta5d6ff`refactor/`, Ta5d6ff`test/`, or Ta5d6ff`deps/`
---
Tc9d1d9## What's New for Developers
<!-- DEV_WHATS_NEW_START -->
<!-- Add new entries at the top. Format:
**Month YYYY** β [Tff7b72Page or area](Te6edf3relative/path) β One sentence on what changed architecturally or procedurally.
Keep the last 5β8 entries and trim older ones from the bottom.
-->
**July 2026** β [Tff7b72Test Builds & Obtainium](Te6edf3developer/test-builds) β New page, replacing the root Ta5d6ff`obtainium-test-builds.md`. Distributable Obtainium configurations now live in Ta5d6ff`obtainium/` (importable export, one-tap link generator, config-site submission).
**July 2026** β Map layer stack (Ta5d6ff`MapLayer.kt`, Ta5d6ff`MapLayersManager`, GeoJSON/KML import, Site Planner) extracted from the Google flavor into shared Ta5d6ff`androidApp/src/main` source (#6148) β F-Droid now renders imported overlays via a new OSMdroid-based renderer, so both flavors compile one implementation.
**July 2026** β [Tff7b72Persistence](Te6edf3developer/persistence) β Local Mesh Discovery sessions and cached Ta5d6ff`msh.to` device links now persist to Room (Ta5d6ff`DiscoverySessionEntity`, Ta5d6ff`DiscoveryPresetResultEntity`, Ta5d6ff`DiscoveredNodeEntity`, Ta5d6ff`DeviceLinkEntity`).
**June 2026** β [Tff7b72Architecture](Te6edf3developer/architecture) / [Tff7b72Codebase](Te6edf3developer/codebase) β Protos migrated from the Ta5d6ff`core/proto` git submodule to the Ta5d6ff`org.meshtastic:protobufs` Maven artifact; there is no longer a local proto module to build or sync.
**June 2026** β AIDL/`IMeshService` removed (#5586). The mesh service is now in-process only, driven entirely through Ta5d6ff`RadioController` β no cross-process binder, no Ta5d6ff`aidl` stubs.
**June 2026** β [Tff7b72Testing](Te6edf3developer/testing) β Split the screenshot pipeline: the new generate-only Ta5d6ff`:docs-screenshots` module holds doc-framed compositions, while Ta5d6ff`:screenshot-tests` stays the CI visual-regression gate β so reframing a doc image no longer churns a test baseline.
**June 2026** β New feature modules: Ta5d6ff`feature:discovery` (mesh network discovery, Te6edf3#5275) and Ta5d6ff`feature:car` (Android Auto / Car App Library, google flavor only, Te6edf3#5633).
**June 2026** β [Tff7b72Testing](Te6edf3developer/testing) β Added the Ta5d6ff`:baselineprofile` module (#5735): a Macrobenchmark cold-start journey generates a Baseline Profile for Ta5d6ff`:androidApp` to AOT-compile hot startup paths.
**June 2026** β [Tff7b72Persistence](Te6edf3developer/persistence) β FTS5 full-text message search (#5373): a Ta5d6ff`PacketFts` virtual table mirrors Ta5d6ff`Packet.messageText`, kept in sync by Room-managed triggers.
<!-- DEV_WHATS_NEW_END -->
Served by rngit 1.5.0 - Generated in 0.19s